package main

import (
	"strconv"
	"strings"
)

// 0636. 函数的独占时间

// 给定一个日志列表 log[i]: func_id | start/end | time
// 计算每个函数的独占时间

// 使用栈模拟，start入栈  end 出栈

type func_t struct{
	funcID int
	t int
}

func exclusiveTime(n int, logs []string) []int {
	var sk []func_t
	var res = make([]int,n)

	for _,log := range logs {
		// 处理一条log
		items := strings.Split(log,":")
		id,_ := strconv.Atoi(items[0])
		op := items[1]
		t,_ := strconv.Atoi(items[2])
		if op == "start" {
			// 入栈
			sk = append(sk, func_t{id,t})
		}else if op == "end" {
			// 出栈
			topFuncT := sk[len(sk)-1]
			sk = sk[:len(sk)-1]
			// 计算结果
			interval := t - topFuncT.t + 1
			res[topFuncT.funcID] +=  interval
			if len(sk) > 0 {
				res[sk[len(sk)-1].funcID] -= interval
			}
		}
	}

	return res
}